package com.hup.timer.model;

import com.alibaba.fastjson.annotation.JSONField;
import com.hup.utils.swing.ColorUtil;
import lombok.Data;
import org.springframework.beans.BeanUtils;

import java.awt.*;

/**
 * @author hugan
 * @date 2020/4/4
 */
@Data
public class TimeViewConfig {

    /**
     * 字体大小,控制窗口大小
     */
    public int fontSize = 38;

    /**
     * 是否12小时制:false-24小时制
     */
    public Boolean is12H = true;

    /**
     * 字体色,带透明度的
     */
    public Integer fontColorI = new Color(30, 235, 15).getRGB();
    /**
     * 背景色,带透明度的
     */
    public Integer bgColorI = new Color(0, 0, 0, (int) (255 * 0.36f)).getRGB();
    /**
     * 范围[0.0,1.0],从 bgColorI中抽取出来的透明度
     */
    @JSONField(serialize = false)
    private float alpha = 0.36f;

    /**
     * 字体色,带透明度的
     */
    @JSONField(serialize = false)
    private Color fontColor;
    /**
     * 背景色,不带透明度的;
     * 用于窗体颜色展示
     */
    @JSONField(serialize = false)
    private Color bgColor;
    /**
     * 背景色,带透明度的
     * 用于配置页面的颜色修改功能
     */
    @JSONField(serialize = false)
    private Color previewBgColor;

    public TimeViewConfig() {
        //每次new时必须要初始化的,[设置界面]的恢复默认会用到
        fontColor = new Color(fontColorI);
        bgColor = new Color(bgColorI);
        previewBgColor = new Color(bgColorI, true);
        //fontSize,alpha等按默认的
    }


    /**
     * 创建预览配置,配置界面中使用
     */
    public TimeViewConfig(TimerConfig timerConfig) {
        BeanUtils.copyProperties(timerConfig.timeViewConfig, this);
    }

    public void setFontColorI(Integer fontColorI) {
        this.fontColorI = fontColorI;
        fontColor = new Color(fontColorI, true);
    }

    public void setBgColorI(Integer bgColorI) {
        this.bgColorI = bgColorI;
        int a = (bgColorI >> 24) & 0xff;
        //这里的关系有点混乱,必须按这个顺序和写法,否则在copyProperties时有问题
        alpha = a / 255f;

        //背景色是无透明度的,窗体透明度由 TimeViewConfig.alpha来决定;
        bgColor = new Color(bgColorI, false);
        previewBgColor = new Color(bgColorI, true);
    }

    /**
     * 鼠标更新透明度
     * @param alpha [0.0,1.0]
     * @apiNote 最终更新到的alpha值,无可避免的与传入值有误差
     */
    public void afterChangedAlpha(float alpha) {
        int a = (int) (alpha * 255f);
        int r = (bgColorI >> 16) & 0xff;
        int g = (bgColorI >> 8) & 0xff;
        int b = (bgColorI) & 0xff;
        int colorI = ColorUtil.getColor(a, r, g, b);
        setBgColorI(colorI);
    }

}
